class CleanWebpackPlugin{
    apply(compiler) {
        // 获取打包输出的目的地址
        let outputPath = compiler.options.output.path;
        // 获取操作文件的对象
        let fs = compiler.outputFileSystem;

        // 注册钩子，在文件输出前执行删除旧文件操作
        compiler.hooks.emit.tap("CleanWebpackPlugin",(compilation)=>{
            // 通过fs删除打包目录下的所有文件
            this.removeFiles(fs,outputPath)
        })
    }

    removeFiles(fs,filePath){
        // 读取指定文件夹下的文件内容，得到的是一个数组
        let files = fs.readdirSync(filePath);

        // 遍历文件一个个删除
        files.forEach(fileName=>{
            // 得到文件全路径
            let path = `${filePath}/${fileName}`
            // 判断是否是文件夹
            let stats = fs.statSync(path);
            // isDirectory方法用来判断是否是文件夹
            if(stats.isDirectory()){
                this.removeFiles(fs,path)
            }else{
                fs.unlinkSync(path)
            }
        })
    }
}

module.exports = CleanWebpackPlugin
